package org.itheima.hello数据结构.数组与链表;

import java.util.concurrent.ThreadLocalRandom;

public class array {
    /* 初始化数组 */
    int[] arr = new int[5]; // { 0, 0, 0, 0, 0 }
    int[] nums = { 1, 3, 2, 5, 4 };

    public void ss(int[] nums){
        System.out.println(nums.length);
        //长度就是实际长度
        //length-1就是最大下标4
    }

    /* 随机访问元素 */
    int randomAccess(int[] nums) {
        /*
        Random random=new Random();
        int index = random.nextInt(0, nums.length);
        int num = nums[index];
        */

        // 在区间 [0, nums.length) 中随机抽取一个数字
        int randomIndex = ThreadLocalRandom.current().nextInt(0, nums.length);
        // 获取并返回随机元素
        int randomNum = nums[randomIndex];
        return randomNum;
    }

    /* 在数组的索引 index 处插入元素 num */
    void insert(int[] nums, int num, int index) {
        /*
        for (int i = nums.length-1; i >index ; i--) {
            nums[i]=nums[i-1];
        }
        nums[index]=num;
        */
        // 把索引 index 以及之后的所有元素向后移动一位

        for (int i = nums.length - 1; i > index; i--) {
            nums[i] = nums[i - 1];
        }
        // 将 num 赋给 index 处的元素
        nums[index] = num;
    }

    /* 删除索引 index 处的元素 */
    void remove(int[] nums, int index) {
        // 把索引 index 之后的所有元素向前移动一位
        for (int i = index; i < nums.length - 1; i++) {
            nums[i] = nums[i + 1];
        }
        /*
        for (int i = index; i <nums.length-1 ; i++) {
            nums[i]=nums[i+1];
        }
        */
    }

    /* 遍历数组 */
    void traverse(int[] nums) {

        int count = 0;
        // 通过索引遍历数组
        for (int i = 0; i < nums.length; i++) {
            count += nums[i];
        }
        // 直接遍历数组元素
        for (int num : nums) {
            count += num;
        }
    }
    /* 在数组中查找指定元素 */
    int find(int[] nums, int target) {
        /*
        for (int i = 0; i < nums.length; i++) {
            if(nums[i]==target){
                return i;
            }
        }
        return -1;
        */
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == target)
                return i;
        }
        return -1;
    }


    /* 扩展数组长度 */
    int[] extend(int[] nums, int enlarge) {
        /*
        int[] num2=new int[nums.length+enlarge];
        for (int i = 0; i < nums.length; i++) {
            num2[i]=nums[i];
        }
        return num2;
        */


        // 初始化一个扩展长度后的数组
        int[] res = new int[nums.length + enlarge];
        // 将原数组中的所有元素复制到新数组
        for (int i = 0; i < nums.length; i++) {
            res[i] = nums[i];
        }
        // 返回扩展后的新数组
        return res;
    }




}
